package net.zigin.nhi.could.waste.service;

import net.zigin.nhi.could.waste.dto.*;
import net.zigin.nhi.could.waste.model.WasteBase;
import net.zigin.nhi.could.waste.service.BaseService;
import net.zigin.nhi.could.waste.vo.HospitalDepartVo;
import net.zigin.nhi.could.waste.vo.WasteBaseVo;
import net.zigin.nhi.could.waste.vo.WasteOutVo;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/*#################################################################*
# 说明:以下代码通过哲勤代码生成工具自动生成    
# 工具:GeneratorCode
# 作者:mgw1986                                                  
# 生成时间:2021-9-13 21:14:42                                               
##################################################################*/


/**
 * WasteBase服务接口类
 *
 * @author mgw1986
 * @version V1.0
 * @ClassName: WasteBaseService
 * @date 2021-9-13 21:14:42
 */
public interface WasteBaseService extends BaseService<WasteBase, String> {

    /*
     * 医废收集 todo wasteCollect printLabel
     *   科室二维码--》重量 类型 备注-》移交人二维码-》生成标签打印
     * 医废入库（扫码 袋装 箱袋绑定）todo putSingleInStorage putMultipleInStorage bindBagWithBox putBoxInStorage
     *   收集人二维码-》箱二维码-》收集标签
     * 医废出库（扫码 批量 rfid射频识别）todo putSingleOutStorage putMultipleOutStorage putBoxOutStorage addReceiver printMessage
     *   出库-》设置接收人-》清单打印
     * 接收人管理 todo save getList setDefault getById remove
     * 医废追溯 参数 医废类型 医废状态 科室 todo wasteList wasteRecordList
     * 医废出入库 只记录工单的出入库 参数 类型 todo inOrOutList
     * 条码打印 医废 集装箱 todo printBarCode
     * 集装箱管理 todo save getList getById remove
     *
     * */

    /**
     * 医废收集
     */
    String wasteCollect(WasteCollectDto wasteCollectDto);

    /**
     * 生成医废二维码
     */
    String generateQrCode(String id);

    /**
     * 单个入库
     */
    void putSingleInStorage(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 批量入库
     */
    void putMultipleInStorage(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 箱袋入库
     */
    void putBoxInStorage(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 获取单个入库信息
     */
    WasteBaseVo getSingleInStorageInfo(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 获取批量入库信息
     */
    List<WasteBaseVo> getMultipleInStorageInfo(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 获取箱袋入库信息
     */
    Map<String, Object> getBoxInStorageInfo(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 箱袋绑定
     */
    String bindBagWithBox(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 解除箱袋绑定
     */
    void removeBindBagWithBox(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 医废列表
     */
    List<WasteBaseVo> getListByBoxId(String wasteBoxId);

    /**
     * 扫描箱详情
     */
    Map<String, Object> getListByBoxQrCode(String wasteBoxQrCode);

    /**
     * 获取待入库列表
     */
    Map<String, Object> getPendingInStorageList(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 待出库列表
     */
    List<WasteBaseVo> getPendingOutStorageList();

    /**
     * 待出库列表数量
     */
    Integer getPendingInStorageListCount(WasteInPutStorageDto wasteInPutStorageDto);

    /**
     * 获取医废详情
     */
    WasteBaseVo getInfoByQrCode(String qrCode);

    // putSingleOutStorage putMultipleOutStorage putBoxOutStorage addReceiver printMessage
    // 扫码出库 扫医废码 箱码 只需要一个ID
    // 打印信息 扫描 然后点击完成出库就要打印信息 获取那些列表呢？？ 记录下打印状态

    /**
     * 扫码出库 弃用
     */
    @Deprecated
    void putSingleOutStorage(WasteOutPutStorageDto wasteOutPutStorageDto);

    /**
     * 箱出库 弃用
     */
    @Deprecated
    void putBoxOutStorage(WasteOutPutStorageDto wasteOutPutStorageDto);

    /**
     * 获取出库详情
     */
    Map<String,Object> getPrintMessage(WasteOutPutStorageDto wasteOutPutStorageDto);

    /**
     * 出库
     */
    void printMessage(WasteOutPutStorageDto wasteOutPutStorageDto);

    /**
     * 检查医废预警 出库和入库时候
     */
    String checkWarnWeight(WasteBaseDto wasteBaseDto);

    /**
     * 医废列表
     */
    List<WasteBaseVo> getList(WasteBaseDto wasteBaseDto);

    /**
     * 收集人当前收集列表
     */
    List<WasteBaseVo> getCurrentCollectList();

    /**
     * 医废编号列表获取详情与总重量
     */
    Map<String,Object> getListByCodes(List<String> codes);

    Map<String,Object> getListByRFID(List<String> rfids);

    /**
     * 医废列表数量
     */
    Integer getCount(WasteBaseDto wasteBaseDto);

    /**
     * 科室二维码获取科室详情
     */
    HospitalDepartVo getDepartByQrCode(QrCodeDto qrCodeDto);

    /**
     * 医院下科室
     */
    List<HospitalDepartVo> getDepartByHospitalBaseId();

    List<HospitalDepartVo> getDepartByParentId(String parentId);

    /**
     * 医废id列表获取详情与总重量
     */
    Map<String,Object> getListWithWeightByIds(List<String> ids);

    Map<String,Object> warnInfoByBoxRecordId(String boxRecordId);

    List<WasteOutVo> getWasteOutList(WasteBaseDto wasteBaseDto);

    Integer getWasteOutCount(WasteBaseDto wasteBaseDto);

    List<WasteBaseVo> getWasteOutInfo(String wasteOutId);

}
